#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
//最小化相关
#include <QSystemTrayIcon>
#include <QCloseEvent>
#include <QMenu>
#include <QAction>
#include "helper.h"
#include <opencv2/opencv.hpp>
//自定义弹窗
#include "mymessagebox.h"
#include <YOLO.hpp>
#include <GrabCut.hpp>
#include <Operation.hpp>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    cv::Mat foregdImg; //前景
    cv::Mat backgdImg;    //背景
    cv::Mat scaledForegdImg; //缩放后的前景
    cv::Mat scaledBackgdImg; //缩放后的背景
    cv::Mat result; //抠图效果图

    cv::Mat mask;
    cv::Rect roi;

    double foregdScale; //缩放比例
    double backgdScale; //缩放比例

private slots:
    void closeEvent(QCloseEvent *event);

    void changeMboxReturn(int num);

    /********************************************选择图片************************************************/
    void on_selectForeBtn_clicked();

    void on_selectBackBtn_clicked();

    /********************************************选择视图************************************************/
    void on_foregdBtn_clicked();

    void on_backgdBtn_clicked();

    void on_maskBtn_clicked();

    void on_ResultBtn_clicked();

    /********************************************选择功能************************************************/
    void on_saveImgBtn_clicked();
    void on_cutBtn_clicked();
    void on_magicBtn_clicked();
    void on_watershedBtn_clicked();
    void on_watershedCutBtn_clicked();
    void on_lassoBtn_clicked();
    void on_lassoCutBtn_clicked();
    void on_resetBtn_clicked();
    void on_changeBtn_clicked();


    /********************************************窗口事件************************************************/
    void on_btn_logout_clicked();

    void on_btn_littleshow_clicked();

    void onCompleteCature(int x, int y, int h, int w);

private:
    Ui::Widget *ui;

    MyMessageBox *myMbox;
    //自定义窗口通信参数
    int mbox_return;

    //最小化到托盘
    QSystemTrayIcon *trayIcon;
    QMenu *trayIconMenu;
    //窗口管理动作
    QAction *returnNormal;
    QAction *quitAction;

    // GrabCut抠图
    GrabCut grabcutter;
    // YOLO
    YOLO yolo = YOLO(yolo_nets[0]);

    void initUi();          //Ui界面初始化函数
    void initMember();      //成员变量初始化函数
    void littleShow();      //最小化显示函数;
};

#endif // WIDGET_H
